import App from "./app";
import "dotenv/config";
import PostController from "./controller/post/post.controller";
import validateEnv from "./utils/validateEnv";
import connectDB from "./utils/connectDB";
import AuthenticationController from "./controller/user/user.controller";

// 验证env
validateEnv();
// 输入 controller
const controllers = [new PostController(), new AuthenticationController()];

// 连接数据库，需要数据库已经运行,
connectDB().then(() => {
  // 仅在数据库连接成功后初始化app
  const app = new App(controllers);
});

/**
 *
 * *命名规范1 文件名使用小驼峰式:第一个单词以小写字母开始，第二个单词的首字母大写。例如：firstName、lastName。
 * *命名规范2 类名使用大驼峰式:每一个单词的首字母都采用大写字母，例如：FirstName、LastName、CamelCase，也被称为 Pascal 命名法。
 * *命名规范3 接口名使用 I+大驼峰式, 列如: IPost，为了和类名区分开
 * *命名规范4 DTO 文件名使用小驼峰式.动作.dto.ts, 例如 post.create.dto.ts 实际类名采用大驼峰式
 * *命名规范5  middleware , exception ,interface 文件名简化为 mw,ex,if
 * *命名规范5.1 middleware 文件名使用描述.mw.ts, 例如:error.mw.ts
 * *命名规范5.2 exception 文件名使用描述.ex.ts, 例如:http.ex.ts
 * *命名规范5.3 interface 文件名使用描述.if.ts，例如:controller.if.ts
 */
